const isEmpty = (value: Object): Boolean => {
    if (value === '' || value == null || value == undefined) {
        return true;
    }
    return false;
}

const constant = {
    emptyStr: "",
    connection: "-",
    year: "年",
    month: "月",
    january: "1",
    zero: "0"
}

export const eco = {
    /**
     * 根据数据日期获取年份
     * @param dataTime 数据日期
     * @param addStr 返回值是否带年字（默认true）
     */
    getYear: (dataTime: string, addStr?: Boolean = true): string => {
        if (isEmpty(dataTime) || dataTime.length < 4) {
            return constant.emptyStr;
        }
        let year = dataTime.slice(0, 4);
        return addStr ? year + constant.year : year;
    },
    /**
     * 根据数据日期获取上年年份
     * @param dataTime 数据日期
     * @param addStr 返回值是否带年字（默认true）
     */
    getLastYear: (dataTime: string, addStr?: Boolean = true): string => {
        if (isEmpty(dataTime) || dataTime.length < 4) {
            return constant.emptyStr;
        }
        let year = dataTime.slice(0, 4) - 1;
        return addStr ? year + constant.year : year + "";
    },
    /**
     * 根据数据日期获取月份
     * @param dataTime 数据日期
     * @param addStr 返回值是否带月字（默认true）
     */
    getMonth: (dataTime: string, addStr?: Boolean = true): string => {
        if (isEmpty(dataTime) || dataTime.length < 6) {
            return constant.emptyStr;
        }
        let res = dataTime.slice(4, 5) == constant.zero ? dataTime.slice(5, 6) : dataTime.slice(4, 6);
        if (addStr) {
            res += constant.month;
        }
        return res;
    },
    /**
     * 根据数据日期获取月份范围
     * @param dataTime 数据日期
     * @param addStr 返回值是否带月字（默认true）
     */
    getMonthRange: (dataTime: string, addStr?: Boolean = true): string => {
        if (isEmpty(dataTime) || dataTime.length < 6) {
            return constant.emptyStr;
        }
        //判断是否是1月，是1月直接返回1月，不是1月返回月份范围
        //01表示六位数据日期的最后两位，表示当前数据日期为1月
        if (dataTime.slice(4, 6) == "01") {
            return eco.getMonth(dataTime, addStr);
        } else {
            return constant.january + constant.connection + eco.getMonth(dataTime, addStr);
        }
    },
    /**
     * 根据数据日期获取年份月份
     * @param dataTime
     */
    getYearAndMonth: (dataTime: string): string => {
        if (isEmpty(dataTime) || dataTime.length < 6) {
            return constant.emptyStr;
        }
        return eco.getYear(dataTime) + eco.getMonth(dataTime);
    },
    /**
     * 根据数据日期获取年份月份范围
     * @param dataTime
     */
    getYearAndMonthRange: (dataTime: string): string => {
        if (isEmpty(dataTime)) {
            return constant.emptyStr;
        }
        return eco.getYear(dataTime) + eco.getMonthRange(dataTime);
    },
    /**
     * 数据脱敏
     * @param value 需要脱敏的值
     * @param decimalDigits 保留小数位数
     */
    dataAmbiguity: (value: number, decimalDigits: number) => {
        if (value == null || value == undefined) {
            return "";
        }
        let leftData = value * generateRandomNumber(0.8, 1);
        let rightData = value * generateRandomNumber(1, 1.2);
        return `${leftData.toFixed(decimalDigits)}~${rightData.toFixed(decimalDigits)}`;
    }
}
//根据指定数字范围生成两位小数的随机数
const generateRandomNumber = (min: number, max: number): number => {
    let num = Math.random() * (max - min) + min;
    return parseFloat(num.toFixed(4));
}